
#ifndef __GRAPHIS_H__
#define __GRAPHIS_H__

#include <iostream>
#include <vector>
#include <math.h>
using namespace std;

namespace utils{
namespace graphis{

/*********************************************
 * Bresenham直线算法 像素点绘制
 *********************************************/
// https://blog.csdn.net/u011341856/article/details/118788353
// https://www.cnblogs.com/fortunely/p/17660786.html
// (x1,y1) (x2, y2)是线段两端点
void BresenhamLine(int x1, int y1, int x2, int y2, vector<pair<int, int>>& points);

/*********************************************
 * 基础函数
 *********************************************/
// 计算点之间的距离
double distance(const pair<double, double>& p1, 
                const pair<double, double>& p2);
// 计算单位向量
pair<double, double> unitVector(const pair<double, double>& p1, 
                                const pair<double, double>& p2);


/*********************************************
 * 计算点到直线的距离
 *********************************************/
double distancePointToLine(const pair<double, double>& p, 
                           const pair<double, double>& p1, 
                           const pair<double, double>& p2);


/*********************************************
 * 计算圆与直线的交点
 *********************************************/
vector<pair<double, double>>
circleLineIntersection(const pair<double, double>& p1,
                       const pair<double, double>& p2,
                       const pair<double, double>& center, 
                       double radius);

};
}; // namespace utils::graphis




#endif